#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
ll f[2077][20][2023];//前i个数字选,选j个数字,总和为k,线性dp,第二维要存11个数,应为0也算,也就是不选这个数
void solve()
{
	for(int i=0;i<=2022;i++) f[i][0][0]=1;//前i个数啥也不选的方案是1

	for(int i=1;i<=2022;i++)
	{
		for(int j=1;j<=10&&j<=i;j++)
		{
			for(int k=1;k<=2022;k++)
			{
				f[i][j][k]=f[i-1][j][k];//不选当前数
				if(k>=i) f[i][j][k]+=f[i-1][j-1][k-i];//i即代表前i个数,又代表当前数的大小	
			}
		}
	}
	cout<<f[2022][10][2022]<<'\n';
}
int main()
{
	close();
	solve();
	return 0;
}
